package com.hnchances.studentscoresystem.controller;

import com.hnchances.studentscoresystem.dto.response.CommonResponse;
import com.hnchances.studentscoresystem.entity.Exam;
import com.hnchances.studentscoresystem.service.ExamService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 考试管理控制器
 * 接口前缀：/exam
 * 鉴权规则：所有接口需登录（无额外身份限制）
 */
@Slf4j
@RestController
@RequestMapping("/exam")
public class ExamController {

    @Autowired
    private ExamService examService;

    /**
     * 新增考试项目
     * @param exam 考试信息（examName 必传）
     * @return 新增结果
     */
    @PostMapping("/add")
    public CommonResponse<Boolean> addExam(@RequestBody Exam exam) {
        log.info("新增考试项目，examName: {}", exam.getExamName());
        boolean result = examService.insert(exam);
        return CommonResponse.success(result, "考试项目新增成功");
    }

    /**
     * 根据ID查询考试项目
     * @param examId 考试ID（请求体JSON格式：{"id":1}）
     * @return 考试信息
     */
    @PostMapping("/getById")
    public CommonResponse<Exam> getExamById(@RequestBody Integer examId) {
        Exam exam = examService.selectById(examId);
        if (exam == null) {
            return CommonResponse.fail(400, "考试项目不存在或已删除");
        }
        return CommonResponse.success(exam, "考试项目查询成功");
    }

    /**
     * 查询所有正常状态考试项目
     * @return 考试列表
     */
    @PostMapping("/getAll")
    public CommonResponse<List<Exam>> getAllExams() {
        List<Exam> examList = examService.selectAll();
        return CommonResponse.success(examList, "所有考试项目查询成功");
    }

    /**
     * 修改考试项目信息
     * @param exam 考试信息（id 必传，examName 可选）
     * @return 修改结果
     */
    @PostMapping("/update")
    public CommonResponse<Boolean> updateExam(@RequestBody Exam exam) {
        if (exam.getId() == null) {
            return CommonResponse.fail(400, "考试项目ID不能为空");
        }
        boolean result = examService.update(exam);
        return CommonResponse.success(result, "考试项目修改成功");
    }

    /**
     * 软删除考试项目（修改status为1）
     * @param examId 考试ID（请求体JSON格式：{"id":1}）
     * @return 删除结果
     */
    @PostMapping("/del")
    public CommonResponse<Boolean> deleteExam(@RequestBody Integer examId) {
        boolean result = examService.deleteById(examId);
        return CommonResponse.success(result, "考试项目删除成功");
    }
}